<?php
class Fisica extends Pessoa
{
    protected $_name   ='pessoa_fisica';
    protected $_primary='id_fisica';

    public function __construct($cadastroConfiavel=true){
    	$this->cadastroConfiavel = $cadastroConfiavel;
		parent::__construct();
    	$this->id_fisica 			= NULL;
    	$this->id_juridica 			= NULL;
		$this->ds_cpf 				= NULL;
		$this->ds_rg 				= NULL;
		$this->ds_ultimo_nome		= NULL;
		$this->ds_nome_credencial 	= NULL;
		$this->ds_email 			= NULL;
		$this->civil 			    = new Civil();
		$this->sexo 				= new Sexo();
    }

	public function validar(){
		$this->erro = new AlertaErro();
		if ($this->ds_email=="" || $this->id_juridica=="" || $this->id_juridica==0 || $this->ds_ultimo_nome=="" ||
			$this->ds_nome_credencial=="" || $this->civil->id_civil==0 || $this->sexo->id_sexo==0){
			$this->erro->load(5); //Campos de preenchimento obrigatório. 	
			$this->erro_encontrado = true;
		} else {
			parent::validar();
		}		
	}    
    
	public function is_validate(){
		$mensagem = new AlertaErro();
		$erro=array('mensagem'  => null,
					'erro' 		=> 0);
		if ($this->ds_email=="" || $this->id_juridica=="" || $this->ds_ultimo_nome=="" || $this->nr_celular=="" ||
			$this->ds_nome_credencial=="" || $this->civil->id_civil==0 || $this->sexo->id_sexo==0){
			$erro=$mensagem->getMessage(5); //Campos de preenchimento obrigatório.		
			$erro['mensagem'] .= ' (Fisica)';  			 	
		} else {
			$erro=parent::is_validate();	
		}
		return $erro;
	}
    
    public function load($id){
		parent::load($id);
		$this->consistir();
		$db = Zend_Registry::get('db');
		$sql = "select id_fisica,
					   id_juridica,
					   ds_cpf,
					   ds_rg,
					   ds_nome_credencial,
					   ds_email,
					   id_sexo,
					   id_civil,
					   ds_ultimo_nome
 				  FROM ".$this->_name." pf
                 where id_fisica=".$id;

		$row = $db->query($sql)->fetch();
    	$this->id_fisica 			= $row["id_fisica"];
    	$this->id_juridica 			= $row["id_juridica"];
		$this->ds_cpf 				= StringFormat::formatarCampo($row["ds_cpf"], StringFormat::maskCPF());
		$this->ds_rg 				= $row["ds_rg"];
		$this->ds_nome_credencial 	= $row["ds_nome_credencial"];
		$this->ds_ultimo_nome		= $row["ds_ultimo_nome"];
		$this->ds_email 			= $row["ds_email"];
		$this->sexo->load($row["id_sexo"]);
		$this->civil->load($row["id_civil"]);
    }

    public function salvar(){
    	parent::salvar();
    	$this->consistir();
    	$dados = array('id_fisica'			=>$this->id_pessoa,
				 	   'id_juridica'		=>$this->id_juridica,
					   'ds_cpf'				=>StringFormat::apenasCodigo($this->ds_cpf),
					   'ds_rg' 				=>$this->ds_rg,
					   'ds_nome_credencial'	=>$this->ds_nome_credencial,
    				   'ds_ultimo_nome'     =>$this->ds_ultimo_nome,
    				   'ds_email'			=>strtolower($this->ds_email),
    				   'id_sexo'			=>$this->sexo->id_sexo,
				   	   'id_civil'			=>$this->civil->id_civil);
    	if ($this->id_fisica == null){
			$this->insert($dados);
			$this->id_fisica = $this->id_pessoa;
    	}
    	else {
    		$where = "id_fisica = " . $this->id_pessoa;
			$this->update($dados, $where);
    	}
		return $this->id_fisica;
    }

	private function consistir(){
		if ($this->cadastroConfiavel==true){
			$this->_name 	= 'pessoa_fisica';
		}else{
			$this->_name 	= 'aux_pessoa_fisica';
		}
		$this->_primary= array('id_fisica', 'id_pessoa');
	}

	public function excluir($id=null, $usuario=null){
		if ($id == null){
			$id = $this->id_fisica;
		}
		if ($id != null){ 
	    	$where = "id_fisica=".$id;
	    	try {
	    		$this->delete($where);
	    	} catch (Exception $e) {
	    		if ($e->getCode()=='23000'){ // Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails
	    			$erro = 'Excluído logicamente.';
	    		}
	    	}
	    	parent::excluir($id, $usuario);     
		}	
	}

	public function buscar($nome, $empresa, $documento, $id_juridica, $ativo=true){
    	$db = Zend_Registry::get('db');
	   	$sql = 'select fi.id_fisica id,
				       fi.ds_nome_credencial,
				       ju.id_juridica,
				       ju.ds_fantasia,
				       fi.ds_cpf,
				       fi.ds_rg,
				       fi.ds_email,
				       se.ds_sexo,
				       fi.nr_celular,
				       fi.nr_telefone
					from fisica   fi,
				         juridica ju,
				         sexo     se
				 where ju.id_juridica = fi.id_juridica
				   and fi.id_sexo = se.id_sexo';
	   	if ($ativo==true){
	   		$sql .= ' and fi.dt_exclusao is null ';
	   	}  
    	if ($nome!=null){
    		$sql .=' and (fi.ds_nome like("%'.$nome.'%") or fi.ds_nome_credencial like ("%'.$nome.'%") or fi.ds_ultimo_nome like ("%'.$nome.'%"))';
    	}
    	if ($empresa!=null){
    		$sql .=' and (ju.ds_razao_social like("%'.$empresa.'%") or ju.ds_nome like ("%'.$empresa.'%"))';
    	}
    	if ($documento!=null){
			$sql .=' and (fi.ds_cpf like ("%'.$documento.'%") or fi.ds_rg like ("%'.$documento.'%"))';
    	}
    	if ($id_juridica!=null){
    		$sql .=' and fi.id_juridica ="'.$id_juridica.'"';
    	}
		return $db->query($sql);
    }

}